/**

 * 
 */
package net.ssta.util.fileUpload;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import java.util.ArrayList;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.simple.JSONObject;

import com.google.gson.Gson;

import net.ssta.core.base.ServletBase;
import net.ssta.core.db.Record;
import net.ssta.core.db.RecordSet;
import net.ssta.core.web.RequestKit;
import net.ssta.common.Constants;

/**
 * @author Administrator
 * 
 */
public class FileUploadManagerServlet extends ServletBase
{
    private static final long serialVersionUID = 1L;
     
    /**
     * 日志管理
     */
    private static Log log =
        LogFactory.getFactory().getInstance(FileUploadManagerServlet.class);
    
    // 默认的执行方法
    protected void defaultAction(HttpServletRequest request,
        HttpServletResponse response)
    {
    }
    
    
    /**
     * 上传照片
     * 
     * @param request
     * @param response
     */
    public void savePhoto(HttpServletRequest request,
        HttpServletResponse response)
    {
        try
        {
            FileUploadManagerHandler uHandler = new FileUploadManagerHandler();
            String[] strArr = uHandler.savePhoto(request);
            
            response.setContentType("text/html;charset=utf-8");
            PrintWriter pw = response.getWriter();
            // cancel by caojl on 20111222
            
            String smallImgPath = strArr[2];
            
            String serverJson = "{'fileName':'" + strArr[1] + "','imgPath':'" + strArr[0];
            
            serverJson += "','id':'" + strArr[2] + "'}";
            
            //serverJson += "','smallImgPath':'" + smallImgPath + "'}";
            
            pw.write(serverJson);
            pw.close();
        }
        catch (IOException e)
        {
            log.error("文件删除IOException:", e);
        }
    }
    
    /**
     * 显示图片
     * 
     * @param request
     * @param response
     */
    public void showImage(HttpServletRequest request,
        HttpServletResponse response)
    {
        String GIF = "image/gif;charset=GB2312";// 设定输出的类型
        String JPG = "image/jpeg;charset=GB2312";
        String BMP = "image/bmp;charset=GB2312";
        String TIFF = "image/tiff;charset=GB2312";
        
        RequestKit kit = new RequestKit(request);
        
        String imagePath = kit.getParameter("imgPath", "");
        String defPath = kit.getParameter("defPath", "");
        
        if (imagePath.equals(""))
        {
            imagePath = Constants.PIC_UPLOAD_PATH + File.separator + defPath;
        }
        else
        {
            imagePath = Constants.PIC_UPLOAD_PATH + File.separator + imagePath;
        }
        
        OutputStream output;
        try
        {
            // 得到输出流
            output = response.getOutputStream();
            
            // 不使用编码处理文件流的情况
            if (imagePath.toLowerCase().endsWith(".jpg"))
            {
                response.setContentType(JPG);
            }
            else if (imagePath.toLowerCase().endsWith(".gif"))
            {
                response.setContentType(GIF);
            }
            else if (imagePath.toLowerCase().endsWith(".bmp"))
            {
                response.setContentType(BMP);
            }
            else if (imagePath.toLowerCase().endsWith(".tif"))
            {
                response.setContentType(TIFF);
            }
            
            ServletContext context = getServletContext();
            // 得到背景对象
            // InputStream imageIn=context.getResourceAsStream(imagePath);
            
            // 文件流
            BufferedInputStream bis =
                new BufferedInputStream(
                    new FileInputStream(new File(imagePath)));
            // 输入缓冲流
            BufferedOutputStream bos = new BufferedOutputStream(output);
            // 输出缓冲流
            byte data[] = new byte[4096];
            // 缓冲字节数
            int size = 0;
            size = bis.read(data);
            while (size != -1)
            {
                bos.write(data, 0, size);
                size = bis.read(data);
            }
            bis.close();
            bos.flush();
            // 清空输出缓冲流
            bos.close();
            output.close();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
    /**
     * 删除照片
     * 
     * @param request
     * @param response
     */
    public void delImage(HttpServletRequest request,
        HttpServletResponse response)
    {
        
        RequestKit kit = (RequestKit) request.getAttribute("RequestKit");
        String filePath = kit.getParameter("filePath", "");
        
        String realpath = request.getRealPath("/")+Constants.PIC_UPLOAD_PATH+File.separator+filePath;
        
        File sourceFile = new File(realpath);
        try
        {
            if (sourceFile.exists())
            {
                if (sourceFile.delete())
                {
                    this.appendString("文件删除成功.");
                }
                else
                {
                    this.appendString("文件删除失败.");
                }
            }
            else
            {
                this.appendString("指定文件不存在.");
            }
        }
        catch (IOException e)
        {
            log.error("文件删除IOException:", e);
        }
    }
    
    
    public void testJsonRecord(HttpServletRequest request,
            HttpServletResponse response)
	{ 
		/*Record record= new Record();
		record.setEntityName("TABLE_A");
		record.addData("标题", "台要求日方撤回决定 驻日机构负责人将返台");
		record.addData("内容", "中新网9月11日电 综合台湾中央社报道，台当局外事部门负责人杨进添今天说，日本执意将钓鱼岛国有化，侵害主权，台当局向日方强烈抗议、严厉谴责，并要求撤回决定。此外，台外事部门已指示驻日代表沈斯淳向日本政府提出强烈抗议，并发电报给沈斯淳以最快速度回台湾详细报告。沈斯淳最快应于12日返回台湾。");
		record.addData("链接", "http://news.sina.com.cn/c/2012-09-11/161825149801.shtml");
		*/
		
		/*Record record= new Record();
		record.setEntityName("TABLE_A");
		record.addData("aa", "bb");
		record.addData("cc", "ee");*/
		 
		
		try { 
			//appendString("[{\"aa\":\"bb\",\"cc\":\"ee\"},{\"aa\":\"bb\",\"cc\":\"ee\"}]");
			appendString("[{\"aa\":\"日本政府签署钓鱼岛购买合同\",\"cc\":\"本政府当天上午召开内阁会议，确认了将尖阁诸岛中三个岛收归国有的方针，并决定从2012财年预备金中拨出20．5亿日元（约合1．66亿元人民币）购岛。\"},{\"aa\":\"bb\",\"cc\":\"ee\"}]");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
	}
    
	public void testJsonRecordSet(HttpServletRequest request,
	        HttpServletResponse response)
	{
		/*RecordSet rset = new RecordSet();
		Record record= new Record(); 
		record.setEntityName("TABLE_A");
		record.addData("标题", "日本政府签署钓鱼岛购买合同");
		record.addData("内容", "本政府当天上午召开内阁会议，确认了将尖阁诸岛中三个岛收归国有的方针，并决定从2012财年预备金中拨出20．5亿日元（约合1．66亿元人民币）购岛。"); 
		record.addData("链接", "http://news.sina.com.cn/c/2012-09-11/123025148516.shtml");
		
		Record record1= new Record(); 
		record1.setEntityName("TABLE_A");
		record1.addData("标题", "我国两艘海监船已抵达钓鱼岛外围海域");
		record1.addData("内容", "记者获悉，中国海监46、中国海监49船已于11日抵达钓鱼岛外围海域，海监部门已经制定相关行动计划，视情况开展维权行动，宣示主权。(记者罗沙)"); 
		record1.addData("链接", "http://news.sina.com.cn/c/2012-09-11/110425147962.shtml");
		
		
		Record record2= new Record(); 
		record2.setEntityName("TABLE_A");
		record2.addData("标题", "石原不满日政府维持现状将设立基金建码头");
		record2.addData("内容", "据报道，石原在记者会上表示，数周前，他曾在首相官邸与野田进行了会谈，对政府出面“购买”钓鱼岛表示支持，但唯一的要求是希望在岛上建设渔民避难用港湾码头。如果政府能够做到这样的话，东京都将会提供帮助。然而，日本政府向美国政府作出的解释是维持现状，表示如果让东京都政府买岛，不知会发生些什么事情。政府实施国有化的目的，就是为了维持平稳安定管理，也就是说，不会考虑搞基础设施。石原对此表示，这令人很失望。"); 
		record2.addData("链接", "http://news.sina.com.cn/c/2012-09-11/170425150107.shtml");
		
		
		Record record3= new Record(); 
		record3.setEntityName("TABLE_A");
		record3.addData("标题", "外交部：中国民众到日本驻华使馆示威可以理解");
		record3.addData("内容", "外交部发言人洪磊在刚刚举行的例行记者会上表示，日本采取的所谓购岛行动是对中国主权的严重侵犯，是对中国人民的民族感情的严重伤害，也是对国际法理的严重践踏。中方希望日方改变他们的错误决定，停止任何侵害中国主权的行动。"); 
		record3.addData("链接", "http://news.sina.com.cn/c/2012-09-11/163525149905.shtml");
		
		
		rset.add(record);
		rset.add(record1);
		rset.add(record2);
		rset.add(record3);*/
		
		
		try {
			//appendString(rset.getJsonString());
			//appendString("[{\"aa\":\"日本政府签署钓鱼岛购买合同\",\"cc\":\"本政府当天上午召开内阁会议，确认了将尖阁诸岛中三个岛收归国有的方针，并决定从2012财年预备金中拨出20．5亿日元（约合1．66亿元人民币）购岛。\"},{\"bb\":\"bb\",\"dd\":\"ee\"}]");
		
			appendString("[ { \"url\":\"http://news.sina.com.cn/c/2012-09-11/123025148516.shtml\",\"title\":\"日本政府签署钓鱼岛购买合同\",\"content\":\"本政府当天上午召开内阁会议，确认了将尖阁诸岛中三个岛收归国有的方针，并决定从2012财年预备金中拨出20．5亿日元（约合1．66亿元人民币）购岛。\"},{ \"url\":\"http://news.sina.com.cn/c/2012-09-11/110425147962.shtml\",\"title\":\"我国两艘海监船已抵达钓鱼岛外围海域\",\"content\":\"记者获悉，中国海监46、中国海监49船已于11日抵达钓鱼岛外围海域，海监部门已经制定相关行动计划，视情况开展维权行动，宣示主权。(记者罗沙)\"},{ \"url\":\"http://news.sina.com.cn/c/2012-09-11/170425150107.shtml\",\"title\":\"石原不满日政府维持现状将设立基金建码头\",\"content\":\"据报道，石原在记者会上表示，数周前，他曾在首相官邸与野田进行了会谈，对政府出面“购买”钓鱼岛表示支持，但唯一的要求是希望在岛上建设渔民避难用港湾码头。如果政府能够做到这样的话，东京都将会提供帮助。然而，日本政府向美国政府作出的解释是维持现状，表示如果让东京都政府买岛，不知会发生些什么事情。政府实施国有化的目的，就是为了维持平稳安定管理，也就是说，不会考虑搞基础设施。石原对此表示，这令人很失望。\"},{ \"url\":\"http://news.sina.com.cn/c/2012-09-11/163525149905.shtml\",\"title\":\"外交部：中国民众到日本驻华使馆示威可以理解\",\"content\":\"外交部发言人洪磊在刚刚举行的例行记者会上表示，日本采取的所谓购岛行动是对中国主权的严重侵犯，是对中国人民的民族感情的严重伤害，也是对国际法理的严重践踏。中方希望日方改变他们的错误决定，停止任何侵害中国主权的行动。\"}]");
		 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
    
    
    
}
    

